package org.aeon.fasttasks.core.annotation;

import java.lang.annotation.*;

/**
 * 注释以达到多线程启动且每个线程都自身循环<br>
 * 示例：
 * <br>@LoopTaskPro({ @LoopTask(value = 7, interval = 1000), @LoopTask(value = 6, async = true)})
 * <br>@LoopTaskPro(sync = @LoopTask(value = 7, interval = 1000), async = @LoopTask(value = 6))
 *
 * @author aeon
 * @createTime 2025/08/13  17:13
 * @description 循环任务
 * @see LoopTask
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface LoopTaskPro {

    /**
     * {@link #async()}和{@link #sync()}的简化配置，二选一，
     * 需要保证刚好有async^async两个LoopTask，
     * 否则会抛出异常
     *
     * @return
     */
    LoopTask[] value() default {};

    /**
     * 同步循环任务配置
     * {@link LoopTask#async()} 固定为 false，无须再设置
     *
     * @return 同步循环配置
     */
    LoopTask sync() default @LoopTask();

    /**
     * 同步循环任务配置
     * {@link LoopTask#async()} 固定为 true，无须再设置
     *
     * @return 异步循环配置
     */
    LoopTask async() default @LoopTask(async = true);

}
